
// type User = {
//   username : string
// }

// // 翻译过来 : T 被 User约束  T 至少要包含 username 也可以包含别的属性
// function getNumber0728<T extends User>(args : T){

// }

// getNumber0728({username:'123' , key:123})

type User = {
  id: number;
  kind: string;
};
// T User 至少包含User : id / kind  也可以有别的
function makeCustomer<T extends User>(u: T): T {
  // Error（TS 编译器版本：v4.4.2）
  // Type '{ id: number; kind: string; }' is not assignable to type 'T'.
  // '{ id: number; kind: string; }' is assignable to the constraint of type 'T', 
  // but 'T' could be instantiated with a different subtype of constraint 'User'.

  // ...u
  // && u
  // as T // 当做T的类型
  return {
    ...u,
    id: u.id,
    kind: 'customer'
  } 
}// 以上代码为什么会提示错误，应该如何解决上述问题？